package com.lanswon.qzsmk.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.lanswon.qzsmk.model.CardControl;
import com.lanswon.qzsmk.model.CardTask;
import com.lanswon.qzsmk.vo.MakeCardParamVo;
import com.lanswon.qzsmk.vo.MakeCardQueryConditionVo;

@Repository
public interface CardTaskMapper {
	/**
	 * 保存
	 * @param record
	 * @return
	 */
    int insert(CardTask record);
    
    /**
	 * 更新状态位置制卡批次
	 * @param record
	 * @return
	 */
    int updateCardTask(CardTask record);
    
    /**
     * 根据任务编号查询制卡任务
     * @param cardTaskNo
     * @return
     */
    CardTask queryCardTaskByCardTaskNo(String cardTaskNo);
    
    /**
     * 根据制卡文件查询任务（银行专用）制卡批次和任务一对一
     * @param cardTaskNo
     * @return
     */
    CardTask queryCardTaskByFileName(String fileName);
   
    /**
     * 分页查询
     */
    List<CardTask> queryCardTask(MakeCardQueryConditionVo mcv);
    
   /**
    * 根据任务类型 查询任务总数
    * @param taskType 任务类型
    * @param taskStatus 任务状态
    * @return
    */
    int querytotalCountByTaskType(MakeCardQueryConditionVo mcv);
    
    /**
	 * 根据任务编号修改任务信息
	 * @param cardTaskNo
	 */
    void modifyCardTaskByTaskNo(MakeCardParamVo mcpv);

    /**
     * 根据任务编号删除任务
     * @param cardTaskNo
     */
    void deleteCardTask(String cardTaskNo);
    
    /**
	 *根据任务编号和任务类型查询任务
	 * @param cardTaskNo
	 * @param taskType
	 * @return
	 */
    CardTask queryCardTaskByTaskNoAndTaskType(String cardTaskNo,String taskType);
/**
	 *根据制卡批次号查询制卡批次号状态
	 * @param batchMakerNo 制卡批次号
	 * @return
	 */
    List<CardTask> queryTaskStatusMakerNo(String batchMakerNo);
    
    /**
	 *根据制卡批次号查询制卡批次号状态，制卡任务编号，制卡批次号
	 * @param batchMakerNo 制卡批次号
	 * @return
	 */
    List<CardTask> queryTaskInfo(@Param("batchMakerNoList")List<String> batchMakerNoList);
    
    /**
	 *根据制卡任务编号，查询出对应的卡号，卡位置，卡申领状态，制卡日期，卡数据ID，市民卡号
	 * @param batchMakerNo 制卡批次号
	 * @return
	 */
    List<CardControl> queryCardInfoByTaskNo(@Param("taskNoList")List<String> taskNoList);
    
    /**
	 * 更新任务状态:已制卡
	 * @param taskNo ：成功的任务列表
	 * @return
	 */
    int updateSuccessTaskStatus(@Param("taskList")List<String> taskList);
    
    /**
	 * 更新任务状态：部分制卡
	 * @param taskNo ：部分制卡完成的列表
	 * @return
	 */
    int updatePartialSuccTaskStatus(@Param("taskPartialList")List<String> taskNo);
    
    //20180330 惠国磊  以下  行  增加
    /**
	 * 查询任务和库存的关联信息
	 * @param taskNo ：部分制卡完成的列表
     * @param numPerPage 
     * @param startLine 
	 * @return
	 */
  //鱼洲杰修改
    List<CardTask> queryDistributionByTask(@Param("cardpCode")String cardpCode,
    		@Param("branchNo")String branchNo,@Param("taskNo")String taskNo,
    		@Param("taskName")String taskName,@Param("oprBranchNo")String oprBranchNo,
    		@Param("startLine")Integer startLine,@Param("numPerPage")Integer numPerPage);
    /**
	 * 查询任务和库存的关联信息数量
	 * @param taskNo ：部分制卡完成的列表
     * @param numPerPage 
     * @param startLine 
	 * @return
	 */
  //鱼洲杰修改
    Integer queryDistributionByTaskNumber(@Param("cardpCode")String cardpCode,
    		@Param("branchNo")String branchNo,@Param("taskNo")String taskNo,
    		@Param("taskName")String taskName,@Param("oprBranchNo")String oprBranchNo);
    
    /**
     * 查询上一条任务号
     */
    String queryPreviousTaskNo();

    /**
     * 根据制卡批号，找到对应的卡产品代码
     * @param batchNoList
     * @return
     */
	List<CardTask> queryCardPCodeByBatchNo(@Param("batchNoList")List<String> batchNoList);
	
	/**
	 * 根据制卡批号，进行入库撤销的任务更新
	 * @param batchNoList
	 */
	void updateByIncomingCancel(@Param("taskNoList")List<String> taskNoList);
	
	/**
	 * 根据任务编号，查询对应的卡代码
	 * @param batchNoList
	 * @return
	 */
	List<CardTask> queryCardPCodeByTaskNo(@Param("taskNoList")List<String> taskNoList);
	
	/**
	 * 查询柜员可领用的卡的卡片信息
	 * @param branchNo
	 * @param requestAmount
	 * @return
	 */
	List<CardTask> queryCardByBlankAppAndBatchApp(@Param("branchNo")String branchNo, @Param("requestAmount")Integer requestAmount);
	
	/**
	 * 通过制卡批号查询任务类型
	 * @param makeCardNoList
	 * @return
	 */
	List<CardTask> queryCardTaskTypeByBatchNoList(@Param("makeCardNoList")List<String> makeCardNoList);

}